package com.tbit.main.service;



import com.tbit.main.pojo.AccountUser;
import com.tbit.main.pojo.MachineTag;
import com.tbit.main.pojo.TagBaseInfo;
import com.tbit.main.pojo.entity.TagAndMachineBind;
import org.apache.ibatis.annotations.Param;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.*;

/**
 * (MachineTag)表服务接口
 *
 * @author shanyong.mo
 * @since 2024-11-22 10:33:42
 */
public interface MachineTagService {

    /**
     * 通过ID查询单条数据
     *
     * @param id 主键
     * @return 实例对象
     */
    MachineTag queryById(Integer id);

    /**
     * @description: 批量查询
     * @param: idList 查询的id集合
     * @return: java.util.List<MachineTag>
     */
    List<MachineTag> queryByIds(List<Integer> idList);

    /**
     * 分页查询
     *
     * @param machineTag 筛选条件
     * @param pageNum    页码
     * @param pageSize   每页数据量
     * @param search     搜索内容
     * @return 查询结果
     */
    List<MachineTag> queryByPage(MachineTag machineTag, Integer pageNum, Integer pageSize, String search);

    /**
     * 查询总数
     *
     * @param machineTag 筛选条件
     * @param search     搜索内容
     * @return 查询结果
     */
    Integer queryCount(MachineTag machineTag, String search);

    /**
     * 新增数据
     *
     * @param machineTag 实例对象
     * @return 实例对象
     */
    MachineTag insert(MachineTag machineTag);

    /**
     * 修改数据
     *
     * @param machineTag 实例对象
     * @return 实例对象
     */
    MachineTag update(MachineTag machineTag);

    /**
     * 通过主键删除数据
     *
     * @param id 主键
     * @return 是否成功
     */
    boolean deleteById(Integer id);


    /**
     * 新增数据（会判断null字段，null字段不插入）
     *
     * @param machineTag 实例对象
     * @return 实例对象
     */
    MachineTag insertCheckNull(MachineTag machineTag);


    /**
     * 更新数据（会判断null字段，null字段不更新）
     *
     * @param machineTag 实例对象
     * @return 实例对象
     */
    MachineTag updateCheckNull(MachineTag machineTag);


    /**
     * @description: 批量绑定车辆的标签
     * @author: mo.shanyong
     * @date: 2024/11/25 13:26
     * @param: userCodeList 车辆编号
     * @param: tagIdList 绑定的标签id
     */
    void bindTagBatch(List<Integer> machineIdList, List<Integer> tagIdList,AccountUser accountUser);

    /**
     * @description: 取消绑定车辆标签
     * @author: mo.shanyong
     * @date: 2024/11/25 16:19
     * @param: machineIdList 车辆Id
     * @param: tagIdList 标签id
     * @param: accountUser 当前登录用户
     */
    void cancelTagBatch(List<Integer> machineIdList, List<Integer> tagIdList,AccountUser accountUser);

    /**
     * @description: 车辆详情页管理车辆标签
     * @author: mo.shanyong
     * @date: 2024/12/16 9:07
     * @param: machineId 车辆id
     * @param: tagIdList 标签id
     */
    void manageTag(Integer machineId,List<Integer> tagIdList,AccountUser accountUser);



}
